package com.jh.calen;

public class CalendarJh 
{
	public final int[] LEAP = {31,29,31,30,31,30,31,31,30,31,30,31};

	public final int[] PLAIN = {31,28,31,30,31,30,31,31,30,31,30,31};

	//윤년을 판단 하는 메소드
	public boolean isLeap(int year)
	{
		boolean islp = false;

		if ((year % 4 == 0 && year % 100 != 0) || (year % 400 ==0)) 
		{
			islp = true;
		}
		return islp;
	}//isLeap

	//찾고자 하는 년까지의 총 일수
	public int days(int year)
	{
		int totalDay = 0;

		for (int i = 1; i < year; i++) 
		{
			if (isLeap(i)) 
			{
				totalDay += 366;
			}
			else
			{
				totalDay += 365;
			}
		}
		return totalDay;
	}//days

	//찾고자 하는 년 + 찾고자 하는 월까지의 총일수
	public int days(int year, int month)
	{
		int totalDay = days(year);

		for (int i = 1; i < month; i++) 
		{
			if (isLeap(year)) 
			{
				totalDay += LEAP[i-1];
			}
			else 
			{
				totalDay += PLAIN[i-1];
			}
		}
		return totalDay;
	}

	//찾고자 하는 년 + 찾고자 하는 월 + 찾고자 하는 일(월의 시작일 = 1)
	public int days(int year, int month, int day)
	{
		int totalDay = days(year,month);

		totalDay += day;

		return totalDay;
	}

	//만들고자 하는 달의 총일수(마지막이 30인지 31인지 29인지 28인지를 판단)
	public int lastDay(int year, int month)
	{
		int lastD = 0;

		if (isLeap(year)) 
		{
			lastD = LEAP[month - 1];
		}
		else
		{
			lastD = PLAIN[month - 1];
		}
		return lastD;
	}

	//달력 폼 만들기
	public void calForm(int year, int month)
	{
		int dayOfWeek = 1+(days(year,month,1)%7)-1;
		
		System.out.printf("\t\t  %d 년\t %d월\n",year,month);
		System.out.print("일\t월\t화\t수\t목\t금\t토\t\n");
		
		for (int i = 0; i < dayOfWeek; i++) 
		{
			System.out.print("\t");
		}
		for (int i = 1; i <= lastDay(year, month); i++) 
		{
			System.out.print(i+"\t");
			if ((i+dayOfWeek)%7==0) 
			{
				System.out.println();
			}
		}
	}
}
